# ========================
# T-101 Telegram Bot
#                     Core
# ========================


# Ядро бота
def botCore(env, start_response):

    import json
    from core.functions import msgSend
    from core import config

    content = ''

    # ===== Получение данных от бота =====

    wsgi_data = env['wsgi.input'].read()
    x = wsgi_data.decode('UTF-8')
    y = x.replace('\n',' ')
    try:
        data = json.loads(y)
    except:
        raise ValueError('JSON parse error.')

    # Получено сообщение
    if data.get('message'):

        # если нет текста для обработки - выходим
        if not data['message']['text']:
            exit()

        # Информация об отправителе
        sender = dict()
        sender['chat_id']    = str(data['message']['from']['id'])
        sender['first_name'] = str(data['message']['from']['first_name'])
        sender['username']   = str(data['message']['from']['username'])
        sender['last_name']  = str(data['message']['from']['last_name'])

        # Текст сообщения
        text = str(data['message']['text'])


    # Получен коллбэк от кнопки
    elif data.get('callback_query'):

        # Отправка ответа на callback
        amsg = dict()
        amsg['callback_query_id'] = str(data['callback_query']['id'])
        msgSend('answerCallbackQuery', amsg)

        # Удаление предыдущего меню
        dmsg = dict()
        dmsg['chat_id'] = str(data['callback_query']['message']['chat']['id'])
        dmsg['message_id'] = str(data['callback_query']['message']['message_id'])
        msgSend( 'deleteMessage', dmsg)

        # Информация об отправителе
        sender = dict()
        sender['chat_id']    = str(data['callback_query']['message']['chat']['id'])
        sender['username']   = str(data['callback_query']['message']['chat']['username'])
        sender['first_name'] = str(data['callback_query']['message']['chat']['first_name'])
        sender['last_name']  = str(data['callback_query']['message']['chat']['last_name'])

        # Текст сообщения
        text  = str(data['callback_query']['data'])

    # На все иное - выход
    else:
        exit()


    sender['message'] = text


    # ==== Парсер сообщения пользователя ============

    msgdata = sender['message'].split()

    msg = dict()

    act = {'cmd': '', 'key': '', 'val': '', 'par': ''}

    # Если получена команда
    if msgdata[0][0] == '/':

        # Команда
        act['cmd'] = msgdata[0].lower()

        try:
            # Ключ
            if msgdata[1]:
                act['key'] = msgdata[1].lower()

            # Значение
            if msgdata[2]:
                act['val'] = msgdata[2]

            # Параметр
            if msgdata[3]:
                act['par'] = msgdata[3]
        except IndexError:
            pass


        # ===== роутер комманд =====

        # Стартовое меню

        if act['cmd']   == '/start':

            # Главное меню
            msg_text = 'Что выбираете?'
            msg['reply_markup'] = { 'inline_keyboard': [[ \
                {'text': 'ПК',     'callback_data': '/pc' }, \
                {'text': 'Сервер', 'callback_data': '/server' }, \
                {'text': 'Дом',    'callback_data': '/home' } \
            ]] }

        # Справка

        elif act['cmd'] == '/help':

            from modules.help import getHelp
            msg_text = getHelp()

        # ПК

        elif act['cmd'] == '/pc':

            # Доступно только админам
            if sender['chat_id'] in config.admins:

                from core import config
                from modules.pc import startPC
                startPC(config.mac)

                msg_text = 'Команда на запуск ПК отправлена.'
            else:
                msg_text = 'У Вас нет прав на запуск ПК.'

        # Сервер

        elif act['cmd'] == '/server':

            from modules.server import getServer

            msg_text = 'Статистика сервера:\n\n' + getServer()

        # Умный дом

        elif act['cmd'] == '/home':

            from modules.home import getHA

            msg_text = 'Состояние квартиры:\n\n' + getHA()

        # Иначе

        else:
            msg_text = sender['username'] + ', команда ' + act['cmd'] + ' мне неизвестна.'

    else:
        msg_text = 'Привет, ' + sender['username'] + '\nВведите команду /start для начала общения с ботом.'


    # Сообщение
    msg['chat_id'] = sender['chat_id']
    msg['text'] = msg_text

    # Отправка сообщения
    msgSend('sendMessage', msg)

    # Отправка кода 200 OK
    start_response('200 OK', [('Content-Type','text/html')])
    return [content.encode('utf-8')]

